package org.erepublik.company.product;

import java.util.HashMap;

import org.erepublik.company.EProductType;

/**
 * Enum reprezentujacy wszystkie mozliwe typy atrybtow
 *
 * @author Kacper Gorski 'Railman' railman85@gmail.com
 */
public enum EProductAttribute {
	DEFENSE("Defense"), // dla DSow i broni
	DURABILITY("Durability"), // dla DSow i broni
	AREA_OF_EFFECT("Area of Effect"), // dla DSow i szpitali
	ATTACK("Attack"), // dla broni
	DAMAGE("Damage"), // dla broni
	WELLNESS("Wellness"), // domki, zarcie, bilety
	HAPPINESS("Happiness"), // domki, zarcie, bilety
	MOVING_DISTANCE("Moving Distance"); // bilety
	
	private String name = null;
	/**
	 * @param name - pelna nazwa podanego atrybutu
	 */
	private EProductAttribute(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	private static HashMap<String, EProductAttribute> map;
	/**
	 * @param name
	 * @return zwraca enuma dla atrybutu o podanej nazwie. Zwraca null, jesli nie ma takiego atrybutu
	 */
	public static EProductAttribute getCountryByName(String name) {
		if (map == null)
			initMap();
		return map.get(name);
	}

	// inicjalizacja niezbednych struktur danych
	private static void initMap() {
		map = new HashMap<String, EProductAttribute>();
		for (EProductAttribute country : EProductAttribute.values()) {
			map.put(country.getName(), country);
		}

	}
	
	
	
	
	
	
	
	private static HashMap<EProductType, EProductAttribute[] > productAttributes = null;
	/**
	 * @param type
	 * @return Zwraca wszystkie atrybuty, ktore wchodza w sklad podanego produktu
	 */
	public static EProductAttribute[] getAllAttributes(EProductType type) {
		if (productAttributes == null)
			initProductAttributes();
		return productAttributes.get(type);
	}
	private static void initProductAttributes() {
		EProductAttribute[] weaponsAttributes = new EProductAttribute[] {
		    EProductAttribute.ATTACK, EProductAttribute.DEFENSE, 
			  EProductAttribute.DURABILITY, EProductAttribute.DAMAGE,   };
		productAttributes = new HashMap<EProductType, EProductAttribute[]>();
		productAttributes.put( EProductType.ARTILLERY , weaponsAttributes);
		productAttributes.put( EProductType.RIFLE , weaponsAttributes);
		productAttributes.put( EProductType.HELICOPTER , weaponsAttributes);
		productAttributes.put( EProductType.TANK , weaponsAttributes);
		productAttributes.put( EProductType.FOOD , new EProductAttribute[] {
				EProductAttribute.WELLNESS, EProductAttribute.HAPPINESS } );
		productAttributes.put( EProductType.GRAIN , new EProductAttribute[0]);
		productAttributes.put( EProductType.IRON , new EProductAttribute[0]);
		productAttributes.put( EProductType.STONE , new EProductAttribute[0]);
		productAttributes.put( EProductType.TITANIUM , new EProductAttribute[0]);
		productAttributes.put( EProductType.OIL , new EProductAttribute[0]);
		productAttributes.put( EProductType.HOUSE , new EProductAttribute[] {
		        EProductAttribute.WELLNESS,  EProductAttribute.DURABILITY, EProductAttribute.HAPPINESS,   });
		productAttributes.put( EProductType.DEFENSE_SYSTEM , new EProductAttribute[] {
				EProductAttribute.AREA_OF_EFFECT, EProductAttribute.DEFENSE, EProductAttribute.DURABILITY });		
		productAttributes.put( EProductType.HOSPITAL , new EProductAttribute[] {
				EProductAttribute.AREA_OF_EFFECT, EProductAttribute.WELLNESS, EProductAttribute.DURABILITY });	
		productAttributes.put( EProductType.TICKET , new EProductAttribute[] {
				EProductAttribute.WELLNESS, EProductAttribute.MOVING_DISTANCE , EProductAttribute.HAPPINESS });	
	}
	
	
	
}
